//
//  HYFStatus.swift
//  MyWeibo
//
//  Created by 黄勇锋 on 16/7/23.
//  Copyright © 2016年 黄勇锋. All rights reserved.
//

import UIKit

class HYFStatus: NSObject {

        //MARK: -模型属性
    
    var created_at:String?
    
    var id:Int64 = 0
    
    var text:String?
    
    //转发数
    var reposts_count:Int = 0
    //评论数
    var comments_count:Int = 0
    //表态数
    var attitudes_count:Int = 0
    
    //微博来源富文本
    var sourceAttr:NSMutableAttributedString?
    
    var source:String?{
        
        didSet{
            
         sourceAttr = getSourceStr(source)
        }
    }
    
    //声明嵌套模型属性
    var user:HYFUser?
    
    //定义 转发微博属性
    var retweeted_status:HYFStatus?
    
    // 定义 配图属性模型数组
    var picture_urls:[HYFPictureInfo]?
    
    //kvc 构造函数
    init(dict:[String:AnyObject]) {
        
        super.init()
        setValuesForKeysWithDictionary(dict)
    }
    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
    }
    
    //由于当前类的 kvc 构造函数只能给当前类的属性赋值,不知道 属性 user 是一个模型
    //程序员需要自己重写 setValueForKey 方法
    
    override func setValue(value: AnyObject?, forKey key: String) {
        
        if key == "user" {
            
            //判断 value 是否为空,而且是否可以转为 字典
            guard let v = value as? [String:AnyObject] else{
                
                return
            }
            //给他赋值
            user = HYFUser(dict: v)
  
        }else if key == "retweeted_status" {
            
            //判断 value 是否为 nil 而且是否可以转成一个字典
            guard let v = value as?[String:AnyObject] else{
                
                return
            }
            //赋值
            retweeted_status = HYFStatus(dict: v)
            
        }else if key == "pic_urls"{
            
            //判断是否为 nil,而且是否可以转化为一个数组, 一个 [] 代表一个对象, [[]]代表一个数组
            guard let v = value as?[[String:AnyObject]] else{
                
                return
            }
            
            //创建一个临时数组
            var tempArray:[HYFPictureInfo] = [HYFPictureInfo]()
            //遍历数组
            for pic in v {
                
                let pictureInfo = HYFPictureInfo(dict: pic)
                
                tempArray.append(pictureInfo)
            }
            
            //对属性进行赋值
            picture_urls = tempArray
            
        }else{
            
            //还需要系统帮我们转模型
            super.setValue(value, forKey: key)
        }
    }
}


extension HYFStatus {
    
    
    func getSourceStr(source:String?) -> NSMutableAttributedString{
        
        //判断是否为 nil ,而且是否包含 ">
        guard let s = source where s.containsString("\">") else{
            let str = "上海3期微博"
            //这里不能写成 getSourceStr(自己调用自己),否则会出现循环调用(导致系统崩溃)
            return getSourceAttr(str)
        }
        
        print(s)
        
        //起始位置
        let startRange = s.rangeOfString("\">")!
        let endRange = s.rangeOfString("</")!
        
        //字符串截取
        let result = s.substringWithRange(startRange.endIndex..<endRange.endIndex)
        
        return getSourceAttr(result)
    }
    
    func getSourceAttr(result:String)->NSMutableAttributedString{
        
        //最终显示格式
        let name = "来自" + result
        //得到range
        let range = (name as NSString).rangeOfString("来自")
        //创建一个可变富文本
        let attr = NSMutableAttributedString(string: name)
        
        //设置属性
        attr.addAttributes([NSForegroundColorAttributeName:UIColor.grayColor()], range: range)
        
        return attr
    }
}


